package com.yusys.pattern.regular.replace.error;

import java.util.HashMap;
import java.util.Map;

/**
 * 错误用法：
 * 在调用子类方法的doSomething时，子类没有
 *
 * 方法执行时，参数类型要完全匹配
 */
public class ClientError {
    public static void main(String[] args) {
        invoker();
        invokerSon();
        invokerSonParam();
    }

    /**
     * 预测：父类被执行，因为调用的就是父类的方法，参数范围比父类范围小，没有影响
     * 把传参类型范围改成和父类一样，结果不变
     * 结果：父类被执行
     */
    private static void invoker() {
        FatherError fatherError = new FatherError();
        HashMap map = new HashMap();
        fatherError.doSomething(map);
    }

    /**
     * 预测：子类自有方法，参数范围小，和该方法内参数相同：子类被执行
     * 结果：子类被执行
     */
    private static void invokerSon() {
        SonError sonError = new SonError();
        HashMap map = new HashMap();
        sonError.doSomething(map);
    }

    /**
     * 预测：父类被执行，参数类型Map 和继承自父类的大范围类型Map 相同，所以是父类被执行
     * 结果：父类被执行
     */
    private static void invokerSonParam() {
        SonError sonError = new SonError();
        Map map = new HashMap();
        sonError.doSomething(map);
    }
}
